<?php

class Users_model extends MY_Model {

    private $table = 'users';

    function getsearchContent($limit, $page) {
        $this->db->select('*');
        $this->db->limit($limit, $page);
        $this->db->order_by($this->input->get_post('func_order_by'), $this->input->get_post('order_by'));
        if ($this->input->get_post('content') != '' && $this->input->get_post('content') != 'type here...') {
            $content = $this->input->get_post('content');
            $this->db->where("id = '$content' OR (`email` LIKE '%$content%' OR `fullname` LIKE '%$content%')");
        }
        if ($this->input->get_post('dateFrom') != '' && $this->input->get_post('dateTo') == '') {
            $this->db->where('created >= "' . date('Y-m-d 00:00:00', strtotime($this->input->get_post('dateFrom'))) . '"');
        }
        if ($this->input->get_post('dateFrom') == '' && $this->input->get_post('dateTo') != '') {
            $this->db->where('created <= "' . date('Y-m-d 23:59:59', strtotime($this->input->get_post('dateTo'))) . '"');
        }
        if ($this->input->get_post('dateFrom') != '' && $this->input->get_post('dateTo') != '') {
            $this->db->where('created >= "' . date('Y-m-d 00:00:00', strtotime($this->input->get_post('dateFrom'))) . '"');
            $this->db->where('created <= "' . date('Y-m-d 23:59:59', strtotime($this->input->get_post('dateTo'))) . '"');
        }
        $query = $this->db->get(PREFIX . $this->table);

        if ($query->result()) {
            return $query->result();
        } else {
            return false;
        }
    }

    function getTotalsearchContent() {
        $this->db->select('*');
        if ($this->input->get_post('content') != '' && $this->input->get_post('content') != 'type here...') {
            $content = $this->input->get_post('content');
            $this->db->where("id = '$content' OR (`email` LIKE '%$content%' OR `fullname` LIKE '%$content%')");
        }
        if ($this->input->get_post('dateFrom') != '' && $this->input->get_post('dateTo') == '') {
            $this->db->where('created >= "' . date('Y-m-d 00:00:00', strtotime($this->input->get_post('dateFrom'))) . '"');
        }
        if ($this->input->get_post('dateFrom') == '' && $this->input->get_post('dateTo') != '') {
            $this->db->where('created <= "' . date('Y-m-d 23:59:59', strtotime($this->input->get_post('dateTo'))) . '"');
        }
        if ($this->input->get_post('dateFrom') != '' && $this->input->get_post('dateTo') != '') {
            $this->db->where('created >= "' . date('Y-m-d 00:00:00', strtotime($this->input->get_post('dateFrom'))) . '"');
            $this->db->where('created <= "' . date('Y-m-d 23:59:59', strtotime($this->input->get_post('dateTo'))) . '"');
        }
        $query = $this->db->count_all_results(PREFIX . $this->table);

        if ($query > 0) {
            return $query;
        } else {
            return false;
        }
    }

    function getDetailManagement($id) {
        $this->db->select('*');
        $this->db->where('id', $id);
        $query = $this->db->get(PREFIX . $this->table);

        if ($query->result()) {
            return $query->result();
        } else {
            return false;
        }
    }

    //VALIDATE USER	
    function validate_email(&$arr_error = '', &$error = '', $skip = '') {
        $email = mysql_real_escape_string($this->input->get_post('email'));
        $type = mysql_real_escape_string($this->input->get_post('type'));
        if ($this->validate_null($arr_error, $t_error, 'email')) {
            //CHECK USERNAME
            if (preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $email)) {
                if (empty($skip)) {
                    $email = $this->model->get('*', USER_TB, "`email` = '$email'");
                    if (!empty($email)) {
                        $arr_error[] = array(
                            'field' => 'email',
                            'txt' => 'Email đã được đăng ký'
                        );
                        $t_error = true;
                        if ($type != 'fb') {
                            $this->_xml_session_error('email-error', 'Email đã được đăng ký');
                            exit();
                        }
                    }
                }
            } else {
                $arr_error[] = array(
                    'field' => 'email',
                    'txt' => 'Email không hợp lệ'
                );
                $t_error = true;
                if ($type != 'fb') {
                    $this->_xml_session_error('email-error', 'Email không hợp lệ');
                    exit();
                }
            }
        } else {
            $arr_error[] = array(
                'field' => 'email',
                'txt' => 'Bạn chưa nhập email'
            );
            if ($type != 'fb') {
                $this->_xml_session_error('email-error', 'Bạn chưa nhập email');
                exit();
            }
        }
        $this->validate_error($error, $t_error);
    }

    function validate_username(&$arr_error = '', &$error = '') {
        $username = mysql_real_escape_string($this->input->get_post('username'));
        $type = mysql_real_escape_string($this->input->get_post('type'));
        if ($this->validate_null($arr_error, $t_error, 'username')) {
            if (preg_match('/^[a-zA-Z0-9]{5,}$/', $username)) { // for english chars + numbers only // valid username, alphanumeric & longer than or equals 5 chars
                $u = $this->model->get('*', USER_TB, "`username` = '$username'");
                if (!empty($u)) {
                    $arr_error[] = array(
                        'field' => 'Username',
                        'txt' => 'Username đã được đăng ký'
                    );
                    $t_error = true;
                    if ($type != 'fb') {
                        $this->_xml_session_error('username-error', 'Username đã được đăng ký');
                        exit();
                    }
                }
            } else {
                $arr_error[] = array(
                    'field' => 'username-error',
                    'txt' => 'Username không hợp lệ'
                );
                $t_error = true;
                if ($type != 'fb') {
                    $this->_xml_session_error('username-error', 'Username không hợp lệ');
                    exit();
                }
            }
        } else {
            $arr_error[] = array(
                'field' => 'email',
                'txt' => 'Bạn chưa nhập username'
            );
            if ($type != 'fb') {
                $this->_xml_session_error('username-error', 'Bạn chưa nhập username');
                exit();
            }
        }
        $this->validate_error($error, $t_error);
    }

    function validate_password(&$arr_error = '', &$error = '', $skip = '') {
        $password = $this->input->get_post('password');
        $type = mysql_real_escape_string($this->input->get_post('type'));
        if ($this->validate_null($arr_error, $t_error, 'password')) {
            if (empty($skip)) {
                if (strlen($password) < 6) {
                    $arr_error[] = array(
                        'field' => 'password',
                        'txt' => 'Mật khẩu phải gồm ít nhất 6 ký tự'
                    );
                    $t_error = true;
                    if ($type != 'fb') {
                        $this->_xml_session_error('pass-error', 'Mật khẩu phải gồm ít nhất 6 ký tự');
                        exit();
                    }
                } elseif ($password == '123456') {
                    $arr_error[] = array(
                        'field' => 'password',
                        'txt' => 'Mật khẩu của bạn quá đơn giản'
                    );
                    $t_error = true;
                    if ($type != 'fb') {
                        $this->_xml_session_error('pass-error', 'Mật khẩu của bạn quá đơn giản');
                        exit();
                    }
                }
            }
        } else {
            $arr_error[] = array(
                'field' => 'password',
                'txt' => 'Bạn chưa nhập mật khẩu'
            );
            if ($type != 'fb') {
                $this->_xml_session_error('pass-error', 'Bạn chưa nhập mật khẩu');
                exit();
            }
        }
        $this->validate_error($error, $t_error);
    }

    function validate_re_password(&$arr_error = '', &$error = '') {
        $password = $this->input->get_post('password');
        $re_password = $this->input->get_post('re_password');
        $type = mysql_real_escape_string($this->input->get_post('type'));
        if (!empty($password)) {
            if ($this->validate_null($arr_error, $t_error, 're_password')) {
                if ($password != $re_password) {
                    $arr_error[] = array(
                        'field' => 're_password',
                        'txt' => 'Mật khẩu lặp lại không trùng khớp'
                    );
                    $t_error = true;
                    if ($type != 'fb') {
                        $this->_xml_session_error('repass-error', 'Mật khẩu lặp lại không trùng khớp');
                        exit();
                    }
                }
            } else {
                $arr_error[] = array(
                    'field' => 're_password',
                    'txt' => 'Bạn chưa nhập lặp lại mật khẩu'
                );
                if ($type != 'fb') {
                    $this->_xml_session_error('repass-error', 'Bạn chưa nhập lặp lại mật khẩu');
                    exit();
                }
            }
        }
        $this->validate_error($error, $t_error);
    }

    function validate_fullname(&$arr_error = '', &$error = '') {
        $fullname = mysql_real_escape_string($this->input->get_post('fullname'));
        $type = mysql_real_escape_string($this->input->get_post('type'));
        if ($this->validate_null($arr_error, $t_error, 'fullname')) {
            
        } else {
            $arr_error[] = array(
                'field' => 'fullname',
                'txt' => 'Bạn chưa nhập họ & tên'
            );
            if ($type != 'fb') {
                $this->_xml_session_error('fullname-error', 'Bạn chưa nhập họ tên');
                exit();
            }
        }
        $this->validate_error($error, $t_error);
    }

    function validate_cmnd(&$arr_error = '', &$error = '') {
        $cmnd = $this->input->get_post('cmnd');
        $type = mysql_real_escape_string($this->input->get_post('type'));
        if ($this->validate_null($arr_error, $t_error, 'cmnd')) {
            if (!is_numeric($cmnd) || strlen($cmnd) < 9) {
                $arr_error[] = array(
                    'field' => 'cmnd',
                    'txt' => 'CMND không hợp lệ'
                );
                $t_error = true;
                if ($type != 'fb') {
                    $this->_xml_session_error('cmnd-error', 'CMND không hợp lệ');
                    exit();
                }
            }
        } else {
            $arr_error[] = array(
                'field' => 'cmnd',
                'txt' => 'Bạn chưa nhập CMND'
            );
            if ($type != 'fb') {
                $this->_xml_session_error('cmnd-error', 'Bạn chưa nhập CMND');
                exit();
            }
        }
        $this->validate_error($error, $t_error);
    }

    function validate_phone(&$arr_error = '', &$error = '') {
        $phone = $this->input->get_post('phone');
        $type = mysql_real_escape_string($this->input->get_post('type'));
        if ($this->validate_null($arr_error, $t_error, 'phone')) {
            if (!is_numeric($phone) || strlen($phone) <= 9) {
                $arr_error[] = array(
                    'field' => 'phone',
                    'txt' => 'Số điện thoại không hợp lệ'
                );
                $t_error = true;
                if ($type != 'fb') {
                    $this->_xml_session_error('phone-error', 'Số điện thoại không hợp lệ');
                    exit();
                }
            } else {
                if (substr($phone, 0, 2) === '01') {
                    if (strlen($phone) < 11 || strlen($phone) > 11) {
                        $arr_error[] = array(
                            'field' => 'phone',
                            'txt' => 'Số điện thoại không hợp lệ'
                        );
                        $t_error = true;
                        if ($type != 'fb') {
                            $this->_xml_session_error('phone-error', 'Số điện thoại không hợp lệ');
                            exit();
                        }
                    }
                } else {
                    if (strlen($phone) < 10 || strlen($phone) > 10) {
                        $arr_error[] = array(
                            'field' => 'phone',
                            'txt' => 'Số điện thoại không hợp lệ'
                        );
                        $t_error = true;
                        if ($type != 'fb') {
                            $this->_xml_session_error('phone-error', 'Số điện thoại không hợp lệ');
                            exit();
                        }
                    }
                }
            }
        } else {
            $arr_error[] = array(
                'field' => 'phone',
                'txt' => 'Bạn chưa nhập số điện thoại'
            );
            if ($type != 'fb') {
                $this->_xml_session_error('phone-error', 'Bạn chưa nhập số điện thoại');
                exit();
            }
        }
        $this->validate_error($error, $t_error);
    }

    function validate_address(&$arr_error = '', &$error = '') {
        $type = mysql_real_escape_string($this->input->get_post('type'));
        if ($this->validate_null($arr_error, $t_error, 'address')) {
            
        } else {
            $arr_error[] = array(
                'field' => 'address',
                'txt' => 'Bạn chưa nhập địa chỉ'
            );
            if ($type != 'fb') {
                $this->_xml_session_error('address-error', 'Bạn chưa nhập địa chỉ');
                exit();
            }
        }
        $this->validate_error($error, $t_error);
    }

    function validate_rules(&$arr_error = '', &$error = '') {
        if ($this->input->get_post('rules') != 'checked') {
            $arr_error[] = array(
                'field' => 'rules',
                'txt' => 'Bạn chưa chấp nhận quy định và thể lệ của chương trình'
            );
            $t_error = true;
        }
        $this->validate_error($error, $t_error);
    }

    function validate_day(&$arr_error = '', &$error = '') {
        $day = $this->input->get_post('birthday');
        $type = $this->input->get_post('type');
        $birthday = explode('/', $day);
        if (($day!='')&& count($birthday)>0) {
            if ($birthday[0] > DaysOfMonth($birthday[1], $birthday[2])) {
                $arr_error[] = array(
                    'field' => 'birthday',
                    'txt' => 'Bạn chọn ngày không đúng'
                );
                if ($type != 'fb') {
                    $this->_xml_session_error('birthday-error', 'Bạn chọn ngày không đúng');
                    exit();
                }
            }
        } else {
            $arr_error[] = array(
                'field' => 'birthday',
                'txt' => 'Ngày tháng năm sinh không hợp lệ'
            );
            if ($type != 'fb') {
                $this->_xml_session_error('birthday-error', 'Ngày tháng năm sinh không hợp lệ');
                exit();
            }
            exit();
        }

        $this->validate_error($error, $t_error);
    }

    function validate_null(&$arr_error = '', &$t_error = '', $field = '') {
        if (!trim($this->input->get_post($field))) {
            $t_error = true;
        } else {
            return true;
        }
    }

    function validate_error(&$error = '', &$t_error = '') {
        $error = (empty($error)) ? $t_error : true;
        return $error;
    }

    //END VALIDATE USER

    function insert_user() {
        $random_key = _token();
        $day = explode('/', $this->input->get_post('birthday'));
        $birthday = $day[2] . '-' . $day[1] . '-' . $day[0];
        $data = array(
            'type' => 1,
            'username' => $this->input->get_post('username'),
            'email' => $this->input->get_post('email'),
            'password' => md5($this->input->get_post('password')),
            'fullname' => $this->input->get_post('fullname'),
            'cmnd' => $this->input->get_post('cmnd'),
            'phone' => $this->input->get_post('phone'),
            'address' => $this->input->get_post('address'),
            'birthday' => date("Y-m-d", strtotime($birthday)),
            'randomkey' => $random_key,
            'status' => 1,
            'created' => date('Y-m-d H:i:s')
        );
        // $link_active = LINK_SHARE . '#/Thanh-Vien/Kich-Hoat-Tai-Khoan/' . $this->input->get_post('email') . '/' . $random_key; //LINK_SHARE.'#/Thanh-Vien/Kich-Hoat-Tai-Khoan/'.$USER->email.'/'.$randomkey;
        // $data_active = array(
        // 'email' => $this->input->get_post('email'),
        // 'fullname' => $this->input->get_post('fullname'),
        // 'randomkey' => $random_key,
        // 'link_active' => $link_active,
        // );
        // $data_email = array(
        // 'email' => $this->input->get_post('email'),
        // 'subject' => 'Email kích hoạt tài khoản!',
        // 'html' => $this->load->view('FRONTEND/email/active_user', $data_active, true)
        // );

        if ($this->db->insert(USER_TB, $data)) {

            //send mail active
            /* if ($this->model->send_email($data_email)) {
              // send ok
              } else {
              //not send
              } */
            $user_id = $this->db->insert_id();

            $USER = $this->model->get('*', USER_TB, "id = '$user_id'");
            $this->model->history_ip($USER);
            $this->session->set_userdata('ss_user_id', $user_id);
            //$this->session->set_userdata('ss_user_email', $this->input->get_post('email'));
            $this->session->set_userdata('ss_user_fullname', $this->input->get_post('fullname'));
            return true;
        } else {
            return false;
        }
    }

    function update_user($id_user = 0) {
        //NORMAL
        $day = explode('/', $this->input->get_post('birthday'));
        $birthday = $day[2] . '-' . $day[1] . '-' . $day[0];
        $data = array(
            'fullname' => $this->input->get_post('fullname'),
            'cmnd' => $this->input->get_post('cmnd'),
            'phone' => $this->input->get_post('phone'),
            'address' => $this->input->get_post('address'),
            'birthday' => date("Y-m-d", strtotime($birthday)),
        );
        if ($this->input->get_post('password') != '') {
            $data['password'] = md5($this->input->get_post('password'));
        }
        $this->db->where('id', $id_user);
        if ($this->db->update(USER_TB, $data)) {
            return true;
        } else {
            return false;
        }
    }

    function history_ip($USER = array()) {
        if (!empty($USER)) {
            $ip = getIP();
            $arr_ip = array();
            $key = false;
            if (!is_array(json_decode($USER->history_ip))) {
                $arr_ip = @get_object_vars(json_decode($USER->history_ip));
            } else {
                $arr_ip = json_decode($USER->history_ip);
            }

            if (!empty($arr_ip)) {
                $key = array_key_exists($ip, $arr_ip);   // $key = 1;
            }

            if (empty($key)) {
                //NOT EXIST
                if (empty($USER->history_ip)) {
                    $arr_ip = array($ip => 1);
                } else {
                    $new_arr_ip = array($ip => 1);
                    $arr_ip = array_merge($arr_ip, $new_arr_ip);
                }
            } else {
                $arr_ip[$ip] = $arr_ip[$ip] + 1;
            }

            $update['history_ip'] = json_encode($arr_ip);
            $this->db->where('id', $USER->id);
            $this->db->update(USER_TB, $update);
        }
    }

    function _xml_session_error($status = '', $message = '') {
        header_xml();
        echo '<param method="clearSession" name="id" />';
        echo '<param method="clearSession" name="username" />';
        echo '<param method="clearSession" name="email" />';
        echo '<param method="clearSession" name="action" />';
        echo '<param method="clearSession" name="password" />';
        echo '<param method="clearSession" name="name" />';
        echo '<param method="clearSession" name="fullname" />';
        echo '<param method="clearSession" name="cmnd" />';
        echo '<param method="clearSession" name="phone" />';
        echo '<param method="clearSession" name="address" />';
        echo '<param method="setSession" name="login" type="Boolean">false</param>';
        echo '<param method="setSession" name="status" type="String">' . $status . '</param>';
        echo '<param method="setSession" name="error-message" type="String">' . $message . '</param>';
        $this->_xml_session_default();
        footer_xml();
    }

    function _xml_session_default() {
        echo '<param method="setSession" name="url_list_profile" type="String">' . PATH_URL . 'user/profile</param>';
        echo '<param method="setSession" name="linkNews" type="String">' . PATH_URL . "news/detail_news" . '</param>';
        echo '<param method="setSession" name="linkNewsDetail" type="String">' . PATH_URL . "news" . '</param>';
        echo '<param method="setSession" name="linkCongDong" type="String">' . PATH_URL . "congdong/detail_congdong" . '</param>';
        echo '<param method="setSession" name="linkCongDongDetail" type="String">' . PATH_URL . "congdong" . '</param>';
    }

    function list_week() {
        $this->db->select('id,name');
        $this->db->where('finish', 1);
        $query = $this->db->get(PREFIX . 'weeks');
        if ($query->num_rows() > 0) {
            return $query->result();
        }
        return false;
    }

    function list_thachthuc($week_id, $user_id = 0) {
        $this->db->select('winner,week_id');
        $this->db->where('user_id', $user_id);
        $this->db->where('week_id', $week_id);
		$this->db->order_by('winner','desc');
        $query = $this->db->get(PREFIX . 'cauhoi_player');
        if ($query->num_rows() > 0) {
            return $query->result();
        }
        return false;
    }

    function list_congdong($user_id = 0, $type = 1) {
        $this->db->select('id,title');
        $this->db->where('user_id', $user_id);
        $this->db->where('status', 1);
        if ($type == 1) {
            $this->db->limit(4);
        }
        $query = $this->db->get(PREFIX . 'congdong');
        if ($query->num_rows() > 0) {
            return $query->result();
        }
        return false;
    }

    function count_congdong($user_id = 0) {
        $this->db->select('id');
        $this->db->where('user_id', $user_id);
        $this->db->where('status', 1);
        $query = $this->db->get(PREFIX . 'congdong');
        if ($query->num_rows() > 0) {
            return $query->num_rows();
        }
        return false;
    }

    function count_thamgia($user_id = 0) {
        $this->db->select('id');
        $this->db->where('user_id', $user_id);
        $this->db->where('status', 1);
        $query = $this->db->get(PREFIX . 'contest_comments');
        if ($query->num_rows() > 0) {
            return $query->num_rows();
        }
        return false;
    }

    function list_thamgia($user_id = 0, $type = 1) {
        $this->db->select('id,comment');
        $this->db->where('user_id', $user_id);
        $this->db->where('status', 1);
        $this->db->order_by('created', 'DESC');
        if ($type == 1) {
            $this->db->limit(4);
        }
        $query = $this->db->get(PREFIX . 'contest_comments');
        if ($query->num_rows() > 0) {
            return $query->result();
        }
        return false;
    }

    function congdong_detail($uid = '', $type = 'DaDang') {
        $this->db->select('*');
        $this->db->where('status', 1);
        $this->db->where('user_id', $uid);
        if ($type == 'DaDang') {
            $query = $this->db->get(PREFIX . 'congdong');
        } else {
            $query = $this->db->get(PREFIX . 'contest_comments');
        }
        if ($query->num_rows() > 0) {
            return $query->result();
        }
        return false;
    }
	 function getRand(){
		$this->db->select('id');
		$this->db->where('status',1);
		$this->db->order_by('id','random');
		$this->db->limit(1);
		$query = $this->db->get(PREFIX.$this->table);

		if($query->result()){
			return $query->result();
		}else{
			return false;
		}
	}
    function getRandFull(){
		$this->db->select('id');
		$this->db->order_by('id','random');
        $this->db->where('status',1);
		$this->db->limit(1);
		$query = $this->db->get(PREFIX.$this->table);

		if($query->result()){
			return $query->result();
		}else{
			return false;
		}
	}
	
	function checkUserVote($contest_id,$user_id){
		$this->db->select('id');
		$this->db->where('contest_id',$contest_id);
		$this->db->where('user_id',$user_id);
		$query = $this->db->get('cli_contest_likes');

		if($query->result()){
			return true;
		}else{
			return false;
		}
	}

}